package ar.uade.distribuidas.tpo.dao;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import ar.uade.distribuidas.tpo.base.dominiodto.ClienteDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.ItemSolicitudDeCotizacionDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.RodamientoDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.SolicitudDeCotizacionDTO;
import ar.uade.distribuidas.tpo.web.delegado.BD;

public class CotizarXMLDAO {

	private static CotizarXMLDAO instancia;

	//public static Document doc;
	private BD bd;


	public static CotizarXMLDAO getInstancia() {
		if (instancia == null){
			instancia = new CotizarXMLDAO();
		}
		return instancia;
	}

	public static CotizarXMLDAO getInstancia(InputStream filecontent) {
		if (instancia == null){
			instancia = new CotizarXMLDAO();
			//instancia.createDocument(filecontent);
		}
		return instancia;
	}


	public CotizarXMLDAO() {
		super();
		bd = BD.getInstance();
	}

/*	private void createDocument(InputStream ARCHIVO){
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		try {
			builder = factory.newDocumentBuilder();
			doc = builder.parse(ARCHIVO);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
*/
	public List<SolicitudDeCotizacionDTO> recuperarSolCot(Document docu) {
		List<SolicitudDeCotizacionDTO> lps = new ArrayList<SolicitudDeCotizacionDTO>();
		NodeList nodos = docu.getElementsByTagName("SolicitudCotizacion");
		for (int i = 0; i < nodos.getLength(); i++) {
			if (nodos.item(i).hasChildNodes()) {
				lps.add(mapSolicitudDeCotizacion((Element) nodos.item(i)));
			}
		}
		return lps;
	}

	private SolicitudDeCotizacionDTO mapSolicitudDeCotizacion(Element solicitudXml) {

		SolicitudDeCotizacionDTO solicitud = new SolicitudDeCotizacionDTO();
		Element auxElem;
		try{
			Element elemProv = (Element) solicitudXml.getElementsByTagName("Cuil").item(0);

			Long cuil = ((Long.parseLong(elemProv.getTextContent())));
			ClienteDTO cliente = null;//new Proveedor(pDTO.getCuil(), pDTO.getNombre());
			cliente = bd.getCliente(cuil);
			solicitud.setCliente(cliente);

			Element rodamientoElem = (Element) solicitudXml.getElementsByTagName("Rodamientos").item(0);
			NodeList items = rodamientoElem.getElementsByTagName("Item");

			for (int j = 0; j < items.getLength(); j++) {
				Node item = items.item(j);

				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element it = (Element) item;
					RodamientoDTO rodDTO = BD.getInstance().getRodamiento(Long.parseLong(it.getAttribute("serie")), getValue("Sufijo", it),
							getValue("Marca", it), getValue("Origen", it));
					
					ItemSolicitudDeCotizacionDTO ip = new ItemSolicitudDeCotizacionDTO();
					auxElem = (Element) it.getElementsByTagName("Cantidad").item(0);
					int cantidad = Integer.valueOf(auxElem.getTextContent());
					ip.setCantidad(cantidad);
					ip.setRodamiento(rodDTO);
					solicitud.getItems().add(ip);																								
				}

			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return solicitud;		
	}

	

	private static String getValue(String tag, Element element) {
		NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
		Node node = (Node) nodes.item(0);
		if (node != null) {
			return node.getNodeValue();
		}
		return "";
	}



}
